在 Go 语言中,不能直接修改 map 中 struct 类型的值的字段,因为 struct 是值类型(value type),而不是引用类型。当你从 map 中取出 struct 时,你得到的是它的副本,而不是原始值,因此修改副本不会影响 map 中的原数据。
这时候我们可以利用局部变量来完成修改(不推荐)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
package main import "fmt" type data struct { name string } func main() { m := map[string]data{ "x": {"baidu"}, } r := m["x"] r.name = "zhihu" m["x"] = r fmt.Println(m) } |
或者在定义map数据的时候使用结构体指针,因为存的是结构体的地址所以这个时候我们自然也就能修改结构体的值了。
|
|
package main // 无法直接更新 struct 的字段值 type data struct { name string } func main() { m := map[string]*data{ "x": {"baidu"}, } m["x"].name = "zhihu" } |
或者
|
|
type result struct { eventName string param string uidCount int // 人数 count int // 次数 } resultMap := make(map[string]*result) if _, ok := resultMap[event.Name]; !ok { resultMap[event.Name] = &result{ eventName: event.Name, } } |
「三年博客,如果觉得我的文章对您有用,请帮助本站成长」
共有 0 - Go语言 修改map字段的值是 struct 类型的值